Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

317
Vistas
Ethers.js - "ERC721A: transferencia del propietario incorrecto" Error de MetaMask

Mi objetivo es setApprovalForAll para un contrato de token antes de ejecutar la función safeTransferFrom para cada tokenId en la colección NFT. De esta manera, podré transferir NFT a otra dirección sin que MetaMask solicite varias aprobaciones.

Sin embargo, recibo un error al ejecutar la función safeTransferFrom , se activa el siguiente error:ver imagen

Esto sucede incluso después de llamar a la función setApprovalForAll . La transacción setApprovalForAll parece haber sido exitosa también:

ver la actividad de MetaMask

pero llamar a isApprovedForAll dice lo contrario (ver el comentario en la línea 16 del código).

Creo que es posible que el error se genere debido a que no llamé a la función setApprovalForAll correctamente, porque ¿por qué otra razón isApprovedForAll devolvería false ?

 document.querySelector('.click-me').onclick = async () => { const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = await provider.getSigner(); const CONTRACT_ADDRESS = '0x...'; // token contract address const RECEIVER_ADDRESS = '0x...'; // this address expected to get approval for all const ABI = [ 'function setApprovalForAll(address operator, bool _approved)', 'function safeTransferFrom(address from, address to, uint256 tokenId)', 'function isApprovedForAll(address owner, address operator) view returns (bool)' ]; const contract = new ethers.Contract(CONTRACT_ADDRESS, ABI, signer); try { const isApproved = await contract.isApprovedForAll(CONTRACT_ADDRESS, RECEIVER_ADDRESS); console.log(isApproved); // returns false even after several attempts await contract.setApprovalForAll(RECEIVER_ADDRESS, true); // seems to work fine, even shows in MetaMask activity // ERROR SEEMS TO OCCUR HERE const test = await contract.safeTransferFrom(CONTRACT_ADDRESS, RECEIVER_ADDRESS, 749); // 749 is my NFT tokenId console.log(test); } catch (error) { console.log(error.message) } };
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Debe cambiar la dirección del contrato al propietario del NFT, consulte a continuación

 document.querySelector('.click-me').onclick = async () => { const provider = new ethers.providers.Web3Provider(window.ethereum); const signer = await provider.getSigner(); const CONTRACT_ADDRESS = '0x...'; // token contract address const RECEIVER_ADDRESS = '0x...'; // this address expected to get approval for all const ABI = [ 'function setApprovalForAll(address operator, bool _approved)', 'function safeTransferFrom(address from, address to, uint256 tokenId)', 'function isApprovedForAll(address owner, address operator) view returns (bool)' ]; const contract = new ethers.Contract(CONTRACT_ADDRESS, ABI, signer); try { const isApproved = await contract.isApprovedForAll(CONTRACT_ADDRESS, RECEIVER_ADDRESS); console.log(isApproved); // returns false even after several attempts await contract.setApprovalForAll(RECEIVER_ADDRESS, true); // seems to work fine, even shows in MetaMask activity // FIXED const test = await contract.safeTransferFrom(signer.address, RECEIVER_ADDRESS, 749); // 749 is my NFT tokenId console.log(test); } catch (error) { console.log(error.message) } };
about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda